home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / bb / src / linedsp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-01  |  3.2 KB  |  154 lines

  1. /*
  2.         charactor line display for 16 color graphic screen
  3.  
  4.                       1993.6.27 v1.0
  5.                       copyright Y.Ouchi
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include <jctype.h>
  12. #include "egb.h"
  13.  
  14. extern    void    ctblset(int, int);
  15. extern    void    cwrt_kan(int, int);
  16. extern    void    cwrt_ank(int, int);
  17.  
  18. extern    char    egbwork[1536];
  19.  
  20. /*
  21.         charactor line display for 16 color graphic screen with BIOS
  22.             in        x : display x posision
  23.                     y : display y posision
  24.                     *s: display charactor
  25. */
  26. void linedsp(int x, int y, char *s)
  27. {
  28.     char    *errormes={"line too long!"};
  29.     char para[256];
  30.     int     len;
  31.     int     i;
  32.  
  33.     len = strlen(s);
  34.     if (len<=256){
  35.         WORD(para + 0) = x;
  36.         WORD(para + 2) = y;
  37.         WORD(para + 4) = len;
  38.         for (i = 6; i < len + 6; i++)
  39.             para[i] = s[i - 6];
  40.         para[i] = 0;
  41.         EGB_sjisString(egbwork, para);
  42.     }
  43.     else {
  44.         len = strlen(errormes);
  45.         WORD(para + 0) = 300;
  46.         WORD(para + 2) = 200;
  47.         WORD(para + 4) = len;
  48.         for (i = 6; i < len + 6; i++)
  49.             para[i] = errormes[i - 6];
  50.         para[i] = 0;
  51.         EGB_sjisString(egbwork, para);
  52.     }
  53.     return;
  54. }
  55.  
  56. /*
  57.      charactor line display for 16 color graphic screen by VRAM write
  58.             in        x : display x posision
  59.                     y : display y posision
  60.                     *s: display charactor
  61.                     page : display page (0 or 1)
  62.                     fcol : charactor color
  63.                     bcol : back color
  64. */
  65. void linedspv(int x, int y, unsigned char *s, int page,
  66.                             unsigned int fcol, unsigned int bcol)
  67. {
  68.     char    *errormes={"line too long!"};
  69.     char    para[256];
  70.     int     len;
  71.     int     i,adr,ch;
  72.  
  73.     ctblset(fcol & 0x0f,bcol & 0x0f);
  74.     if (page==0) adr = (y-15)*512+(x/2);
  75.     else adr = (y-16)*512+(x/2)+0x40000 ;
  76.  
  77.     i=0;
  78.     while (i<256){
  79.         if (s[i]==0) break;
  80.         if (iskanji(s[i])){
  81.             ch=s[i]*0x100+s[i+1];
  82.             cwrt_kan(ch,adr+4*i);
  83.             i=i+2;
  84.         }
  85.         else{
  86.             ch=s[i];
  87.             cwrt_ank(ch,adr+4*i);
  88.             i=i+1;
  89.         }
  90.     }
  91.  
  92.     if (i==256){
  93.         len = strlen(errormes);
  94.         WORD(para + 0) = 300;
  95.         WORD(para + 2) = 200;
  96.         WORD(para + 4) = len;
  97.         for (i = 6; i < len + 6; i++)
  98.             para[i] = errormes[i - 6];
  99.         para[i] = 0;
  100.         EGB_sjisString(egbwork, para);
  101.     }
  102.     return;
  103. }
  104.  
  105. /*
  106.      charactor line display for 16 color graphic screen by VRAM write
  107.             in        x : display x posision
  108.                     y : display y posision
  109.                     *s: display charactor
  110.                     leng : text length
  111.                     page : display page (0 or 1)
  112.                     fcol : charactor color
  113.                     bcol : back color
  114. */
  115. void linedspvl(int x, int y, unsigned char *s, int leng, int page,
  116.                             unsigned int fcol, unsigned int bcol)
  117. {
  118.     char    *errormes={"line too long!"};
  119.     char    para[256];
  120.     int     i,adr,ch;
  121.     int        len;
  122.  
  123.     ctblset(fcol & 0x0f,bcol & 0x0f);
  124.     if (page==0) adr = (y-15)*512+(x/2);
  125.     else adr = (y-15)*512+(x/2)+0x40000 ;
  126.     if (leng<=256){
  127.         i=0;
  128.         while (i<leng){
  129.             if (iskanji(s[i])){
  130.                 ch=s[i]*0x100+s[i+1];
  131.                 cwrt_kan(ch,adr+4*i);
  132.                 i=i+2;
  133.             }
  134.             else{
  135.                 ch=s[i];
  136.                 cwrt_ank(ch,adr+4*i);
  137.                 i=i+1;
  138.             }
  139.         }
  140.     }
  141.     else {
  142.         len = strlen(errormes);
  143.         WORD(para + 0) = 300;
  144.         WORD(para + 2) = 200;
  145.         WORD(para + 4) = len;
  146.         for (i = 6; i < len + 6; i++)
  147.             para[i] = errormes[i - 6];
  148.         para[i] = 0;
  149.         EGB_sjisString(egbwork, para);
  150.     }
  151.     return;
  152. }
  153.  
  154.